package Persistance;

import Model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jdom.*;
import org.jdom.input.SAXBuilder;


/**
 * Permet la sauvegarde et le chargement d un produit dans un fichier xml
 * Pattron de conception Singleton
 * 
 * @author Ivelios
 */
public class XMLUtil implements IVisitor{

   private Element root;
   private Document document;

    private static XMLUtil instance;

    private XMLUtil(){}

    public static XMLUtil getInstance(){
        if(instance == null){
            instance = new XMLUtil();
        }
        return instance;
    }



    /**
     *
     * @return le produit du fichier concerne
     */
    public IProduct load(String cheminFichier){
        //chargement du fichier dans un document
        SAXBuilder sxb = new SAXBuilder();
        try{
            document = sxb.build(new File(cheminFichier));
        }catch(Exception e){return null;}
            //La racine du fichier xml
            root = document.getRootElement();

            //la racine du produit
            Element eProduit = root.getChild("produit");

            //Creation du produit
            IProduct produit = new Product(eProduit.getAttributeValue("titre"), eProduit.getChildText("description"), eProduit.getChildText("objectif"));

            //Iterator pour le parcours des enfants
            Iterator iterator;

            //Creation des themes
            List<ITheme> listTheme = new ArrayList();
            iterator = eProduit.getChildren("theme").iterator();
            while(iterator.hasNext()){
                Element courant = (Element)iterator.next();
                listTheme.add(new Theme(Integer.parseInt(courant.getAttributeValue("id")),courant.getText()));
            }

            //Creation des histoires   -  > A FAIRE
           /* List<IHistoire> listHistoire = new ArrayList();
            iterator = eProduit.getChildren("histoire").iterator();
            while(iterator.hasNext()){
                Element courant = (Element)iterator.next();
                listHistoire.add(null);
            }*/



        return produit;
    }

    /**
     *
     * @return false si echec
     */
    public boolean save(){
        //A COMPLETER
        return false;
    }

    
    public void visit(IElement element) {
        
    }

}
